package STUDENT.TRINHQUANGXUANDUC.OPPS.JSONExcercise;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

import JAVACORE_TRAINING.OOPs.JSON_MODULES.JSONSAMPLES.Student;

public class Jackson {
	public static void main(String[] args) {
		docFileJson();
	}

	private static void docFileJson() {
		// 1. Sử dụng comps có sẵn để xuất hiện cửa sổ cho phép lưu files
		// ở 1 thư mục bất kỳ (ctrl + c --> ctrl + v)
		JFileChooser objFile = new JFileChooser();
		objFile.setCurrentDirectory(new java.io.File("."));
		objFile.setDialogTitle("Chọn file: ");
		objFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		String[] EXTENSION = new String[] { "json" };
		FileNameExtensionFilter filter = new FileNameExtensionFilter("JSON files", EXTENSION);
		objFile.setFileFilter(filter);
		objFile.setMultiSelectionEnabled(false);

		int returnVal = objFile.showOpenDialog(null);
		String ParentPath = "";
		String FileName = "";
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			// ParentPath = objFile.getSelectedFile().getParent();
			FileName = objFile.getSelectedFile().getPath();

			// 2. khai báo & khởi tạo đối tượng
			ObjectMapper objMapper = new ObjectMapper();

			// 3. Thực thi đọc dữ liệu từ files JSON --> danh sách sinh viên
			// trong java?
			try {
				List<Student> lisStudent = objMapper.readValue(new File(FileName), new TypeReference<List<Student>>() {
				});

				// 4. Duyệt dữ liệu & hiển thị ra bên ngoài màn hình
				for (Student objS : lisStudent) {
					System.out.println("+ RollNo: " + objS.getRollNo());
					System.out.println("+ FullName: " + objS.getFullName());
					System.out.println("+ Mark: " + objS.getMark());
				}
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	private static void ghiFileJson() {
		List<Students> listStudents = new ArrayList<>();
		Students hocsinh = new Students();
		hocsinh.setFullName("Trinh Quang Xuan Duc");
		hocsinh.setRollNo(03265);
		hocsinh.setMark(5.9);
		listStudents.add(hocsinh);
		String path = "D:\\json.json";
		ObjectMapper mapper = new ObjectMapper();
		JFileChooser objChooser = new JFileChooser();
		objChooser.setCurrentDirectory(new java.io.File("."));
		objChooser.setDialogTitle("Chon file");
		objChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		String[] extension = new String[] { "json" };
		FileNameExtensionFilter filter = new FileNameExtensionFilter("Json File", extension);
		objChooser.setFileFilter(filter);
		objChooser.setMultiSelectionEnabled(false);
		int returnVal = objChooser.showSaveDialog(null);
		String ParentPath = "";
		String FileName = "";
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			FileName = objChooser.getSelectedFile().getPath();
			try {
				mapper.writeValue(new File(FileName), listStudents);
				System.out.println("Đã ghi dữ liệu xuống files thành công!!!");
			} catch (Exception e) {
				// TODO: handle exception
				System.out.println(e.getMessage());
			}

		}
	}
}
